/**
 * 1、什么是函数？
 *  - 实现特定功能的n条语句的封装体
 *  - 只有函数是可以执行的，其他类型的数据不能执行
 *
 * 2、为什么要用函数？
 *  - 提高代码复用
 *  - 便于阅读交流
 *
 * 3、如何定义函数？
 *  - 函数声明
 *  - 表达式
 *
 * 4、如何执行函数？
 *  - test()：直接调用
 *  - obj.test()：通过对象调用
 *  - new Test()：new调用
 *  - test.call/apply(obj)：临时让test成为obj的方法进行调用
 *
 * 5、什么函数才是回调函数？
 *  - 你定义的
 *  - 你没有调
 *  - 但最终它执行了（在某个时刻或某个条件下）
 *
 * 6、常见的回调函数有哪些？
 *  - dom事件回调函数
 *             其中的this是发生事件的dom元素
 *  - 定时器回调函数
 *             其中的this是window
 *  - ajax请求回调函数
 *  - 生命周期回调函数
 *
 * 7、定时器：超时定时器&循环定时器
 *
 * 8、IIFE：Immediately-Invoked-Function Expression
 *  作用
 *      - 隐藏实现
 *      - 不会污染（全局）命名空间
 *      - 用来编写js模块
 *
 * 9、形参和实参
 *    - 形参的本质是变量，而且是局部变量
 *    - 实参的本质是数据
 */

function showInfo(age) {
  if (age < 18) {
    console.log("未成年");
  } else if (age > 60) {
    console.log("算了吧");
  } else {
    console.log("刚好");
  }
}

// showInfo(17);

var obj = {};
function test() {
  this.name = "xxxx";
}

test.call(obj);

console.log(obj);
